package lu.med.praxiswahl.wahlumed.service.beans;

import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import lu.med.praxiswahl.wahlumed.dao.beans.daointerface.BillDAOInt;
import lu.med.praxiswahl.wahlumed.dao.beans.daointerface.ReminderDAOInt;
import lu.med.praxiswahl.wahlumed.model.beans.CustomerTBL;
import lu.med.praxiswahl.wahlumed.model.beans.HonorarTBL;
import lu.med.praxiswahl.wahlumed.model.beans.RemindersTBL;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.CustomerServiceInt;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.ReminderServiceInt;

/**
 * Session Bean implementation class ReminderService
 */
@Stateless
@Remote({ ReminderServiceInt.class })
public class ReminderService implements ReminderServiceInt {

	@EJB
	private ReminderDAOInt remDao;
	private RemindersTBL tmpRem;

	@EJB
	private CustomerServiceInt cust;

	@EJB
	private BillDAOInt billDao;

	/**
	 * Default constructor.
	 * 
	 * @throws Exception
	 */
	public ReminderService() {

		tmpRem = new RemindersTBL();

		/*
		 * TimerActivatorServiceInt activator =
		 * TimerActivatorServiceInt.getInstance(); activator.activate();
		 */

	}

	@Override
	public int archivReminderItem(Long itemID) {

		return RET_OPERATION_DONE_PROPERLY;
	}

	@Override
	public int createReminderItem(String matricule,
			lu.med.praxiswahl.wahlumed.model.beans.HonorarTBL rechnung) {

		RemindersTBL tmpRem_1 = new RemindersTBL();

		tmpRem_1.setCustomer(cust.getCustomer(matricule));
		// tmpRem_1.setRestBetrag(toPay);
		tmpRem_1.setRechnung(rechnung);

		this.remDao.persist(tmpRem_1);

		return RET_OPERATION_DONE_PROPERLY;

	}

	@Override
	public int deleteReminderItem(Long itemID) {
		this.remDao.delete(itemID);
		return RET_OPERATION_DONE_PROPERLY;
	}

	@Override
	public String getRechnungsDatum() {
		Calendar c = this.tmpRem.getRechnung().getErstell_datum();
		String dat = "";
		int d = c.get(GregorianCalendar.DAY_OF_MONTH);
		if (d < 10) {
			dat = "0" + d;
		} else {
			dat = "" + d;
		}
		d = c.get(GregorianCalendar.MONTH) + 1;
		if (d < 10) {
			dat += ".0" + d + "." + c.get(GregorianCalendar.YEAR);
		} else {
			dat += "." + d + "." + c.get(GregorianCalendar.YEAR);
		}
		return dat;
	}

	@Override
	public String get_AnFriedensGerichtAM() {

		return this.tmpRem.getAnFriedensGerichtAM();
	}

	@Override
	public String get_AushangDatum() {

		return this.tmpRem.getAushangDatum();
	}

	@Override
	public String get_Bemerkung() {

		return this.tmpRem.getBemerkung();
	}

	@Override
	public CustomerTBL get_Customer() {

		return this.tmpRem.getCustomer();
	}

	@Override
	public String get_FirstReminder() {

		return this.tmpRem.getFirstReminder();
	}

	@Override
	public Long get_Id() {

		return this.tmpRem.getId();
	}

	@Override
	public double get_RestBetrag() {
		// return this.tmpRem.getRestBetrag();
		return this.tmpRem.getRechnung().getAPayer();
	}

	@Override
	public String get_SecondReminder() {

		return this.tmpRem.getSecondReminder();
	}

	@Override
	public String get_ThirdReminder() {

		return this.tmpRem.getThirdReminder();
	}

	@Override
	public String get_ZustellungsDatum() {

		return this.tmpRem.getZustellungsDatum();
	}

	@Override
	public boolean is_Archivieren() {

		return this.tmpRem.isArchivieren();
	}

	@Override
	public RemindersTBL[] listActualReminders() {
		if (remDao.findActualReminders() != null) {
			Object[] tmp = remDao.findActualReminders().toArray();
			RemindersTBL[] eintraege = new RemindersTBL[tmp.length];

			for (int i = 0; i < tmp.length; i++) {
				eintraege[i] = (RemindersTBL) tmp[i];
			}
			return eintraege;
		} else
			return null;
	}

	@Override
	public void set_AnFriedensGerichtAM(String anFriedensGerichtAM) {
		this.tmpRem.setAnFriedensGerichtAM(anFriedensGerichtAM);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_Archivieren(boolean archivieren) {

		HonorarTBL bill = billDao.findBillsByID(tmpRem.getRechnung()
				.getRechnung_nummer());
		bill.setBezahlt(true);
		bill.setImDossier(false);
		bill.setErstellt(true);
		billDao.update(bill);

		this.tmpRem.setArchivieren(archivieren);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_AushangDatum(String aushangDatum) {
		this.tmpRem.setAushangDatum(aushangDatum);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_Bemerkung(String bemerkung) {
		this.tmpRem.setBemerkung(bemerkung);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_Customer(CustomerTBL customer) {
		this.tmpRem.setCustomer(customer);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_FirstReminder(String firstReminder) {
		this.tmpRem.setFirstReminder(firstReminder);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_Id(Long id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void set_RechnungsDatum(String rechnungsDatum) {
		// TODO Auto-generated method stub

	}

	@Override
	public void set_RestBetrag(double restBetrag) {

	}

	@Override
	public void set_SecondReminder(String secondReminder) {
		this.tmpRem.setSecondReminder(secondReminder);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_ThirdReminder(String thirdReminder) {
		this.tmpRem.setThirdReminder(thirdReminder);
		// this.remDao.update(tmpRem);

	}

	@Override
	public void set_ZustellungsDatum(String zustellungsDatum) {
		this.tmpRem.setZustellungsDatum(zustellungsDatum);
		// this.remDao.update(tmpRem);

	}

	@Override
	public RemindersTBL[] listOLDRemindersOfINTERVAL(String fromDatum,
			String toDatum) {
		if (remDao.findOLDRemindersOfINTERVAL(fromDatum, toDatum) != null) {
			Object[] tmp = remDao
					.findOLDRemindersOfINTERVAL(fromDatum, toDatum).toArray();
			RemindersTBL[] eintraege = new RemindersTBL[tmp.length];

			for (int i = 0; i < tmp.length; i++) {
				eintraege[i] = (RemindersTBL) tmp[i];
			}
			return eintraege;
		} else
			return null;

	}

	@Override
	public void getA_ReminderInstance(RemindersTBL item) {

		this.tmpRem = item;

	}

	@Override
	public int updateReminderItem() {

		// RemindersTBL reminderItem = this.remDao.retrieveReminderItemByID(id);
		this.remDao.update(tmpRem);
		return 0;
	}

	@Override
	public void updateReminderItem(RemindersTBL item) {
		RemindersTBL tmpItem = this.remDao.retrieveReminderItemByID(item
				.getId());

		tmpItem.setAnFriedensGerichtAM(item.getAnFriedensGerichtAM());
		tmpItem.setAushangDatum(item.getAushangDatum());
		tmpItem.setFirstReminder(item.getFirstReminder());
		tmpItem.setSecondReminder(item.getSecondReminder());
		tmpItem.setThirdReminder(item.getThirdReminder());
		tmpItem.setBemerkung(item.getBemerkung());
		tmpItem.setZustellungsDatum(item.getZustellungsDatum());

		this.remDao.update(tmpItem);

	}

}
